//
//  CQTemplateContainerView.h
//  TSDemo_ImageFilter
//
//  Created by ciyouzen on 2014/5/8.
//  Copyright (c) 2014年 dvlproad. All rights reserved.
//
//  一整个完整的模板(里面包含小模板块)

#import "CJTemplateContainerBaseView.h"

NS_ASSUME_NONNULL_BEGIN

/// 布局结束后显示的缩放演示动画类型
typedef NS_ENUM(NSUInteger, CQTemplateInitAnimate) {
    CQTemplateInitAnimateNone = 0,  /**< 都不显示动画 */
    CQTemplateInitAnimateAll,       /**< 都显示 */
    CQTemplateInitAnimateFirst,       /**< 只有第一个显示 */
};

@protocol CQTemplateContainerViewDelegate <NSObject>

- (void)movedEditView;

@end



@interface CQTemplateContainerView : CJTemplateContainerBaseView //<CQTemplateViewDelegate>
{
    
}
@property (nonatomic, assign) id<CQTemplateContainerViewDelegate> delegateMove;

@property (nonatomic, strong) UIImageView *boardImageView;  /**< 拼图的边框 */

@property (nullable, nonatomic, strong) CAShapeLayer *borderLayerTopLeft;       /**< 左上角的圆角 */
@property (nullable, nonatomic, strong) CAShapeLayer *borderLayerTopRight;      /**< 右上角的圆角 */
@property (nullable, nonatomic, strong) CAShapeLayer *borderLayerBottomLeft;    /**< 左下角的圆角 */
@property (nullable, nonatomic, strong) CAShapeLayer *borderLayerBottomRight;   /**< 右下角的圆角 */


#pragma mark - Init
/*
 *  初始化
 *
 *  @param frame                frame
 *  @param initAnimate          布局结束后显示的缩放演示动画类型
 *
 *  @return 一整个完整的模板(里面包含小模板块)
 */
- (instancetype)initWithFrame:(CGRect)frame initAnimate:(CQTemplateInitAnimate)initAnimate NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithFrame:(CGRect)frame
          templateCreateBlock:(CJTemplateBaseView *(^ _Nonnull)(void))templateCreateBlock
      templateDataConfigBlock:(void(^ _Nullable)(CJTemplateBaseView *bTemplateView, id bDataModel, CJTemplateDataConfigTime time))templateDataConfigBlock
                allowExchange:(BOOL)allowExchange
        exchangeCompleteBlock:(void(^ _Nullable)(void))templateExchangeCompleteBlock NS_UNAVAILABLE;

#pragma mark - Setup
/*
 *  设置创建各种边框layer的方法(创建layer时候都不用提供path和frame,内部都会自动补充)
 *
 *  @param realPointBorderLayerCreateBlock  真正的模板模型信息的边框layer创建(此属性为nil时候表示不设置边框)
 *  @param selfBorderLayerCreateBlock       本视图的边框layer创建方法
 */
- (void)setupRealPointBorderLayerCreateBlock:(CAShapeLayer *(^ _Nullable)(void))realPointBorderLayerCreateBlock
                  selfBorderLayerCreateBlock:(CAShapeLayer *(^ _Nullable )(UIRectCorner rectCorner))selfBorderLayerCreateBlock;

#pragma mark - Update
/*
 *  模板快个数不变的情况下的模板样式更新
 *
 *  @param styleIndex   对应子框个数下的样式类型
 */
- (void)updateStyleIndex:(NSInteger)styleIndex;


/*
 *  更新样式和数据
 *
 *  @param dataModels       模板中的模块个数dataModels.count、模板中的模块数据dataModel
 *  @param styleIndex       对应子框个数下的样式类型
 */
- (void)updateImagesByDataModels:(NSArray *)dataModels styleIndex:(NSInteger)styleIndex;
- (void)updateTemplateWithSubViewCount:(NSInteger)subViewCount
                            styleIndex:(NSInteger)styleIndex
             realTemplateModelGetBlock:(CJTemplateModel *(^ _Nonnull)(CGRect templateRealSuperFrame))realTemplateModelGetBlock
       realPointBorderLayerCreateBlock:(CAShapeLayer *(^ _Nullable)(void))realPointBorderLayerCreateBlock NS_UNAVAILABLE;

#pragma mark - Event
/*
 *  显示自己画的边框线段
 *
 *  @param rectCorner       rectCorner
 */
- (void)showPathForRectCorner:(UIRectCorner)rectCorner;

@end

NS_ASSUME_NONNULL_END


